package com.cango.qutz.web.util;

import java.io.File;
import java.io.IOException;

import org.apache.commons.lang.StringUtils;

/**
 * <p>ClassName: FileUtils</p>
 * <p>Description: 文件处理的工具类</p>
 * <p>Author: wzx</p>
 * <p>Date: 2015-05-14</p>
 */
public class FileUtils {
    /**
     * 获取文件的后缀
     *
     * @param fileName 文件名
     * @return 文件后缀
     */
    public static String getFileExtension(String fileName) {
        int idx = fileName.lastIndexOf(".");
        if (idx >= 0) return fileName.substring(idx + 1);
        else return fileName;
    }

    /**
     * 创建文件,如果文件所在的目录不存在，先创建文件的目录
     *
     * @param path 文件全路径
     * @return 创建的文件
     * @throws IOException
     */
    public static File createFile(String path) throws IOException {
        path = FileUtils.resolveDir(path);
        int idx = path.lastIndexOf("/");
        if (idx > 0) {
            File dir = new File(path.substring(0, idx));
            dir.mkdirs();
        }
        File file = new File(path);
        if (file.exists()) file.delete();
        file.createNewFile();
        return file;
    }

    /**
     * 解决Windows,Linux等操作系统文件分隔符不同的问题，统一使用/作为文件分隔符
     *
     * @param dirPath 文件路径
     * @return 处理后的文件路径
     */
    public static String resolveDir(String dirPath) {
        dirPath = StringUtils.replaceChars(dirPath, '\\', '/');
        dirPath = StringUtils.replace(dirPath, "//", "/");
        return dirPath;
    }

    /**
     * 获取文件的父目录
     *
     * @param file 文件
     * @return 父目录
     */
    public static File getFileDir(File file) {
        String path = file.getAbsolutePath();
        path = FileUtils.resolveDir(path);
        int idx = path.lastIndexOf("/");
        return new File(path.substring(0, idx));
    }

    /**
     * 创建临时文件
     *
     * @param fileName 文件名
     * @return 临时文件
     * @throws IOException
     */
    public static File createTempFile(String fileName) throws IOException {
        String tempDir = System.getProperty("java.io.tmpdir");
        File tempFile = new File(new File(tempDir), fileName);
        tempFile.createNewFile();
        return tempFile;
    }

    /**
     * 去掉文件名中的文件后缀名
     *
     * @param fileName 文件名
     * @return 去掉后缀名后的文件名
     */
    public static String getFileNameWithoutExtension(String fileName) {
        int idx = fileName.lastIndexOf(".");
        if (idx >= 0) return fileName.substring(0, idx);
        else return fileName;
    }

    /**
     * 删除临时文件
     *
     * @param file 文件对象
     */
    public static void deleteTempFile(File file) {
        if (file.exists()) {
            file.delete();
        }
    }
}
